package org.apache.ibatis.demo.mapper;

import java.lang.reflect.Proxy;

/**
 * MyBatis面向Mapper编程工作原理
 * Mapper接口是没有实现类的，当调用接口方法时，采用了JDK的动态代理，先从Configuration配置类MapperRegistry对象中获取mapper接口和对应的代理对象工厂信息（MapperProxyFactory），
 * 然后利用代理对象工厂MapperProxyFactory创建实际代理类（MapperProxy），最后在MapperProxy类中通过MapperMethod类对象内保存的中对应方法的信息，以及对应的sql语句的信息进行分析，最终确定对应的增强方法进行调用。
 */
public class ProxyMethod {
  public static void main(String[] args) {
    BlogMapper obj = (BlogMapper) Proxy.newProxyInstance(BlogMapper.class.getClassLoader(), new Class[] { BlogMapper.class }, new MapperProxy());
    System.out.println(obj.selectBlog(1));
  }
}
